package edu.kmust.simple;

/**
 * @author: 常伟
 * @create: 2019/3/12 21:07
 * @email: kmustchang@qq.com
 * @version: 1.0
 * @Description: 第十九题：页码计数问题
 *                  使用公式快速计算
 *           假设page表示某一个页数，而F(page)表示十进制数的总和
 *           F(page)=page                   当   page>=1     &&   page<=9
 *           F(page)=2*(page-9)+9           当   page>=10    &&   page<=99
 *           F(page)=3*(page-99)+189        当   page>=100   &&  page<=999
 */
public class ExaminationNineteen02 {

    /**这个表示一种要有多少页*/
    int page=0;

    public static void main(String[] args) {
        ExaminationNineteen02 examinationNineteen02=new ExaminationNineteen02();
        examinationNineteen02.completePage(1578);
        System.out.println(examinationNineteen02.page);
    }

    /**
     * 利用公式计算totalCount的总页数
     * @param totalCount 这个表示所有用于标记页码的十进制数总和
     */
    private void completePage(int totalCount) {
        //表示某一页需要的十进制的个数
        int pageCount=1;
        //表示最高位相同的数字的个数
        int baseCount=1;
        while(totalCount>=pageCount*baseCount*9){
            totalCount-=(pageCount*baseCount*9);
            pageCount++;
            baseCount*=10;
        }
        if(totalCount%pageCount==0){
            page=totalCount/pageCount+baseCount-1;
        }
    }

}
